﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DefensiveShield
{
    public static partial class OS
    {
        //---------------------------------------------------------------------------------------------------------------------------------
        //------------------------------------------------------------------------------ ENUM SECURITY LABEL TO RUSSIAN STRING ------------
        //---------------------------------------------------------------------------------------------------------------------------------
        /**
            @brief Функция возвращения названий значений
            @return string - название значения на русском языке
            @return null - в случае ошибки
        */
        public static string ToRussianString(this Secrecy param)
        {
            switch (param)
            {
                case Secrecy.NonSecret:
                    return "Несекретно";
                case Secrecy.StaffOnly:
                    return "Для служебного пользования";
                case Secrecy.Confidential:
                    return "Секретно";
                case Secrecy.Secret:
                    return "Совершенно секретно";
                case Secrecy.TopSecret:
                    return "Особой важности";
                
                default:
                    return null;
            }
        }

        //---------------------------------------------------------------------------------------------------------------------------------
        //------------------------------------------------------------------------------ ENUM RIGHTS TO RUSSIAN STRING --------------------
        //---------------------------------------------------------------------------------------------------------------------------------
        /**
            @brief Функция возвращения названий значений
            @return string - название значения на русском языке
            @return null - в случае ошибки
        */
        public static string ToRussianString(this Rights param)
        {
            switch (param)
            {
                case Rights.Noright:
                    return "Нет доступа";
                case Rights.Read:
                    return "Только чтение";
                case Rights.ReadWrite:
                    return "Чтение и запись";
                default:
                    return null;
            }
        }

        //---------------------------------------------------------------------------------------------------------------------------------
        //------------------------------------------------------------------------------ ENUM FILE TYPE TO RUSSIAN STRING -----------------
        //---------------------------------------------------------------------------------------------------------------------------------
        /**
            @brief Функция возвращения названий значений
            @return string - название значения на русском языке
            @return null - в случае ошибки
        */
        public static string ToRussianString(this FileType param)
        {
            switch (param)
            {
                case FileType.Directory:
                    return "Папка с файлами";
                case FileType.Executable:
                    return "Приложение";
                case FileType.TextFile:
                    return "Текстовый файл";
                case FileType.Other:
                    return "Файл";
                default:
                    return null;
            }
        }

        //---------------------------------------------------------------------------------------------------------------------------------
        //------------------------------------------------------------------------------ ENUM INTEGRITY TYPE TO RUSSIAN STRING ------------
        //---------------------------------------------------------------------------------------------------------------------------------
        /**
            @brief Функция возвращения названий значений
            @return string - название значения на русском языке
            @return null - в случае ошибки
        */
        public static string ToRussianString(this Integrity param)
        {
            switch (param)
            {
                case Integrity.Valid:
                    return "Файл не был изменён";
                case Integrity.Corrupted:
                    return "Файл был изменён после последней проверки";
                case Integrity.Unchecked:
                    return "Файл не был проверен на целостность в связи корректными причинами";
                case Integrity.ErrorAppeared:
                    return "Файл не был првоерен на целостность из-за неизвестной ошибки";
                default:
                    return null;
            }
        }

        //---------------------------------------------------------------------------------------------------------------------------------
        //------------------------------------------------------------------------------ ENUM ERROR CODES TO RUSSIAN STRING ---------------
        //---------------------------------------------------------------------------------------------------------------------------------
        /**
            @brief Функция возвращения названий значений
            @return string - название значения на русском языке
            @return null - в случае ошибки
        */
        public static string ToRussianString(this ErrorCodes param)
        {
            switch (param)
            {
                case ErrorCodes.NoError:
                    return "";
                case ErrorCodes.UnknownError:
                    return "Неизвестная ошибка в системе";
                case ErrorCodes.OpenAttemptOfUnregisteredFile:
                    return "Попытка открытия файла, который не является ни исполняемым, ни зарегистрированным в системе";
                case ErrorCodes.AttemptToRegisterRegisteredFile:
                    return "Попытка зарегистрировать существующий объект файловой системы, который уже зарекистрирован";
                case ErrorCodes.AttemptToRegisterNonDirectoryAndNonExecutable:
                    return "Попытка зарегистрировать уже существующий объект файловой системы, который не является ни исполняемым, ни директорией";
                case ErrorCodes.AttemptToRegisterUnexistedFile:
                    return "Попытка зарегистрировать уже существующий объект файловой системы, в то время как он не существует";
                case ErrorCodes.WrongPassword:
                    return "Неверный пароль пользователя";
                case ErrorCodes.UnknownErrorInCheckUserPassword:
                    return "Фатальная ошибка при попытке проверки пароля пользователя";
                case ErrorCodes.NotAdminLogin:
                    return "Вход разрешён только администратору";
                case ErrorCodes.ErrorInDeletingOsSession:
                    return "Ошибка при удалении сессии пользователя";
                case ErrorCodes.MandatoryAccessDenied:
                    return "Недостаточный уровень допуска";
                case ErrorCodes.AttemptToDeleteAdministrator:
                    return "Нельзя удалить учётную запись администратора";
                case ErrorCodes.NotEnoughPermissionsToDeleteFile:
                    return "Недостаточно прав для удаления";
                case ErrorCodes.UnknownLoggingError:
                    return "Ошибка при логгировании сообщения";
                case ErrorCodes.ErrorDeletingLogFile:
                    return "Ошибка при удалении файла логгирования";
                case ErrorCodes.FileNotWritable:
                    return "Недостаточно прав доступа";
                case ErrorCodes.DeleteAttemptOfUnregisteredFile:
                    return "Попытка удаления не зарегистрированного файла.";
                case ErrorCodes.DeleteAttemptOfExecutable:
                    return "Попытка удаления исполняемого файла.";
                case ErrorCodes.NotEnoughPermissionsToCreateDirectory:
                    return "Недостаточно прав для создания директории.";
                case ErrorCodes.AttemptToRunNonExecutable:
                    return "Попытка запуска не исполняемого файла.";
                case ErrorCodes.NotEnoughPermissionsToExecuteFile:
                    return "Недостаточно прав для запуска файла для исполнения.";
                case ErrorCodes.ErrorStartingSeveralApplicationInstances:
                    return "Запрещён запуск нескольких экземпляров приложения одновременно.";
                case ErrorCodes.IntegrityErrorFileAlreadyIsChecking:
                    return "Нельзя добавить в список целостности файл, который уже туда добавлен";
                case ErrorCodes.ErrorInTakingHashInIntegrityAdder:
                    return "Ошибка взятия хеша от файла, подверженного проверке целостности";
                case ErrorCodes.NotEnoughPermissionsToDeleteFileFromIntegrityCheck:
                    return "Недостаточно прав на удаление файла из списка контроля целостности";
                case ErrorCodes.ErrorWhileCheckingFilesIntegrity:
                    return "Ошибка при проверке целостности файлов";
                case ErrorCodes.IntegrityCorrupt:
                    return "Нарушение целостности файлов";
                case ErrorCodes.CryptoDllEncryptionDecryptionCorrupt:
                    return "CryptoDll не прошла проверку на пригодность. Функции дешифрования не является обратной к функции шифрования";
                case ErrorCodes.CryptoDllAbsent:
                    return "CryptoDll не была найдена библиотека с шифрованием";
                case ErrorCodes.CryptoDllError:
                    return "CryptoDll неизвестная ошибка при шифровании";
                case ErrorCodes.WrongGlobalKeyPassword:
                    return "Неверный пароль от системы";
                default:
                    return "There is no russian translation for this type of error: " + param.ToString();
            }
        }
    }
}
